package com.hww.common.util;

/**
 * 将温度转换成不同的单位。
 * C 指摄氏单位  （°C）
 * F 指华氏温度单位  （°F）
 * K 指开尔文单位  （K）
 */
public final class TemperatureUtils {

    /**
     * 将摄氏温度转换为华氏温度。
     *
     * @param temp 摄氏温度值。
     * @return 对应的华氏温度。
     */
    public static float cToF(float temp) {
        /*摄氏度到华氏度的转换公式*/
        return (temp * 9) / 5 + 32;
    }

    /**
     * 将摄氏温度转换为开尔文温度。
     *
     * 此函数接收一个摄氏温度值作为输入，并通过加上摄氏到开尔文的转换常数273.15，
     * 来计算并返回相应的开尔文温度。开尔文温度 scale 是一种绝对温度标度，
     * 它的零点对应于绝对零度，即-273.15摄氏度。
     *
     * @param temp 摄氏温度值。
     * @return 对应的开尔文温度值。
     */
    public static float cToK(float temp) {
        return temp + 273.15f;
    }

    /**
     * 将华氏温度转换为摄氏温度。
     *
     * 此函数接受一个华氏温度值，然后通过一个标准公式将其转换为摄氏温度。
     * 华氏温度和摄氏温度之间的转换公式是：C = (F - 32) * 5/9，
     * 其中C表示摄氏温度，F表示华氏温度。
     *
     * @param temp float 类型的华氏温度值。
     * @return 返回转换后的摄氏温度，以 float 类型表示。
     */
    public static float fToC(float temp) {
        return (temp - 32) * 5 / 9;
    }

    /**
     * 将华氏温度转换为开尔文温度。
     *
     * 此函数接受一个华氏温度值，并通过一个固定的数学公式将其转换为开尔文温度。
     * 华氏温度和开尔文温度之间的转换关系是 K = °F + 255.3722222222。
     * 这个函数对于需要在软件中进行温度单位转换的应用非常有用。
     *
     * @param temp float 类型的华氏温度值。
     * @return 返回转换后的开尔文温度值，也是一个 float 类型的浮点数。
     */
    public static float fToK(float temp) {
        return temp + 255.3722222222f;
    }

    /**
     * 将开尔文温度转换为摄氏温度。
     *
     * 此函数接收一个开尔文温度值，并返回相应的摄氏温度。
     * 开尔文温度与摄氏温度的关系是：摄氏温度 = 开尔文温度 - 273.15。
     * 因此，函数内部执行的操作是减去273.15以得到摄氏温度。
     *
     * @param temp 开尔文温度值。
     * @return 对应的摄氏温度值。
     */
    public static float kToC(float temp) {
        return temp - 273.15f;
    }

    /**
     * 将开尔文温度转换为华氏温度。
     *
     * 此函数接收一个开尔文温度值，并返回相应的华氏温度。
     * 开尔文和华氏温度之间的转换不需要乘除操作，只需从开尔文温度中减去一个常数即可。
     * 这个常数459.67f代表了开尔文温标和华氏温标之间的固定偏差。
     *
     * @param temp float 类型的开尔文温度值。
     * @return float 类型的华氏温度值。
     */
    public static float kToF(float temp) {
        return temp - 459.67f;
    }
}